{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# Solar System\n",
    "\n",
    "[![Google Collab Book](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/tum-pbs/PhiFlow/blob/develop/docs/Planets_Tutorial.ipynb)\n",
    "\n",
    "\n",
    "This demo simulates the gravitational pull between multiple massive bodies.\n",
    "We will use Euler steps in time which do not preserve energy.\n",
    "\n",
    "[**Φ-Flow**](https://github.com/tum-pbs/PhiFlow)\n",
    "&nbsp;&nbsp;&nbsp; [**Documentation**](https://tum-pbs.github.io/PhiFlow/)\n",
    "&nbsp;&nbsp;&nbsp; [**API**](https://tum-pbs.github.io/PhiFlow/phi)\n",
    "&nbsp;&nbsp;&nbsp; [**Demos**](https://github.com/tum-pbs/PhiFlow/tree/master/demos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "# !pip install phiflow"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "We use the convenience import of Φ<sub>Flow</sub> which imports the core submodules, such as `math` and `vis`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "from phi.flow import *"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "Let's define the initial positions for our planets.\n",
    "We stack the position vectors of the planets a long a new [*instance*](https://tum-pbs.github.io/PhiFlow/Math.html#shapes) dimension we call *planets*.\n",
    "Φ<sub>Flow</sub> also allows us to name the individual elements along that dimension. These names are part of the shape and will be present on all tensors derived from `x` that have this dimension."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "\u001B[94m(x=0, y=0)\u001B[0m; \u001B[94m(x=10, y=0)\u001B[0m; \u001B[94m(x=0, y=12)\u001B[0m \u001B[92m(planetsⁱ=Sun,Earth,Mars, vectorᶜ=x,y)\u001B[0m"
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = stack({\n",
    "    'Sun': vec(x=0, y=0),\n",
    "    'Earth': vec(x=10, y=0),\n",
    "    'Mars': vec(x=0, y=12)}, instance('planets'))\n",
    "x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "We can plot these positions by constructing a `PointCloud`, using the `bounds` parameter to specify the axis range. Since the universe we are simulating is infinite, the `bounds` have no physical meaning in this case."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 864x360 with 1 Axes>"
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 864x360 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "COLOR = wrap(['#fcd700', '#006dfc', '#fc2e00'], instance(x))\n",
    "plot(PointCloud(x, bounds=Box(x=(-2, 12), y=(-1, 13))), color=COLOR)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "Next, let's give the planets initial velocities so that they circle the sun.\n",
    "For a nice plot, we pass the vector-valued velocities as the `values` of our `PointCloud`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 864x360 with 1 Axes>"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 864x360 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "v = math.rotate_vector(x, PI/2)\n",
    "v = math.divide_no_nan(v, math.vec_length(v))\n",
    "plot(PointCloud(x, values=v, bounds=Box(x=(-2, 12), y=(-1, 13))), color=COLOR)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "Next, we define the masses of our planets which will determine the gravitational pull.\n",
    "These also allow us to make our plot prettier by passing a `Sphere` as the elements of the `PointCloud`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 864x360 with 1 Axes>"
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 864x360 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "masses = math.stack({'Sun': 1000, 'Earth': 10, 'Mars': 10}, instance('planets'))\n",
    "plot(PointCloud(Sphere(x, radius=masses**0.333 * .2), bounds=Box(x=(-2, 12), y=(-1, 13))), color=COLOR)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "To Simulate our system, we define a simple update step, `simulation`, and iterate it to produce the position and velocity trajectories `xs` and `vs`.\n",
    "We use `iterate` instead of a `for`-loop because `iterate` can also stack all intermediate values to give us the full trajectory along the newly-defined `time` axis.\n",
    "This saves us from creating two lists, adding every element and manually stacking the values.\n",
    "\n",
    "Inside the simulation step, `math.pairwise_distances` computes all body-body distances, adding a new instance dimension with the name `others` by default."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "\u001B[92m(timeᵇ=101, planetsⁱ=Sun,Earth,Mars, vectorᶜ=x,y)\u001B[0m \u001B[94m-2.464 ± 7.704\u001B[0m \u001B[37m(-2e+01...1e+01)\u001B[0m"
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def simulate(x, v, dt=.5):\n",
    "    dx = math.pairwise_distances(x)\n",
    "    a = .01 * math.sum(math.divide_no_nan(masses.planets.as_dual() * dx, math.vec_squared(dx) ** 1.5), '~planets')\n",
    "    return x + v * dt, v + a * dt\n",
    "\n",
    "xs, vs = iterate(simulate, batch(time=100), x, v)\n",
    "xs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "Let's plot the system trajectory as an animation!\n",
    "We can use the `time` dimension created above for the animation.\n",
    "Using `vis.overlay` allows us to plot multiple fields in one figure."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<matplotlib.animation.FuncAnimation at 0x26d89ada9d0>",
      "text/html": "<video width=\"864\" height=\"360\" controls autoplay loop>\n  <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAIGZ0eXBNNFYgAAACAE00ViBpc29taXNvMmF2YzEAAAAIZnJlZQAAY5ltZGF0AAACrwYF//+r\n3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE2MSByMzA0OCBiODZhZTNjIC0gSC4yNjQvTVBF\nRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAyMSAtIGh0dHA6Ly93d3cudmlkZW9sYW4u\nb3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFs\neXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVk\nX3JlZj0xIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBk\nZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTEx\nIGxvb2thaGVhZF90aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50\nZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MyBi\nX3B5cmFtaWQ9MiBiX2FkYXB0PTEgYl9iaWFzPTAgZGlyZWN0PTEgd2VpZ2h0Yj0xIG9wZW5fZ29w\nPTAgd2VpZ2h0cD0yIGtleWludD0yNTAga2V5aW50X21pbj0xMCBzY2VuZWN1dD00MCBpbnRyYV9y\nZWZyZXNoPTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9MSBjcmY9MjMuMCBxY29tcD0w\nLjYwIHFwbWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAA\nDlpliIQAEP/+94G/MstfIrrJcfnnfSyszzzkPHJdia7Af/33pZsYmAS4BF9yeIbLajZQ6Pm+TJoB\niJxvTOzBOdJpz6hMtHR8pGf7O2V9oABYHr6eEAE2nqd5BYhO7QcrXxOQ2K8iSntC33Z1DH3c0Rd+\nZreI03spPxLsr7OKMI44pfqcKwij5donixeYWYN4hAAA/tRB2xCC648pKG4irlG9ERvvQOtszPnb\n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\nAAAATGF2ZjU4Ljc3LjEwMA==\n\">\n  Your browser does not support the video tag.\n</video>"
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(vis.overlay(\n",
    "    PointCloud(Sphere(xs, radius=masses ** 0.333 / 5), bounds=Box(x=(-20, 20), y=(-20, 20))),\n",
    "    PointCloud(xs, vs * 2, bounds=Box(x=(-20, 20), y=(-20, 20)))), animate='time', frame_time=100, color=COLOR)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}